synchronous vs asynchronous execution order